/**
 * \file	EnsembleCouples.inl
 * \author	Thibaut ALGRIN
 * \author	Emmanuel CARRE
 * \version	0.1
 * \date	Décembre 2011
 */

#include <algorithm>

namespace tp3
{
	/*
	 * \brief Constructeur de la Classe EnsembleCouples
	 * \fn EnsembleCouples();
	 */
	template<typename Type1, typename Type2>
	EnsembleCouples<Type1, Type2>::EnsembleCouples()
	{
	}
	/*
	 * \brief Constructeur de la Classe EnsembleCouples
	 * \fn EnsembleCouples(Iterateur debut, Iterateur fin)
	 * \param Iterateur debut
	 * \param Iterateur fin
	 */
	template<typename Type1, typename Type2>
	template<typename Iterateur>
	EnsembleCouples<Type1, Type2>::EnsembleCouples(Iterateur debut, Iterateur fin) :
	m_ensemble(debut, fin)
	{
	}
	/*
	 * \brief Méthode permettant d'ajouter un std::pair à la liste
	 * \return void
	 * \param Type1 premier
	 * \param Type2 second
	 * \fn void ajouterPaire(Type1 premier, Type2 second)
	 */
	template<typename Type1, typename Type2>
	void EnsembleCouples<Type1, Type2>::ajouterPaire(Type1 premier, Type2 second)
	{
		m_ensemble.insert(std::pair<Type1, Type2>(premier, second));
	}
	/*
	 * \brief Méthode pour savoir si la liste est vide
	 * \fn bool estVide() const
	 * \param void
	 * \return bool, true ou false
	 */
	template<typename Type1, typename Type2>
	bool EnsembleCouples<Type1, Type2>::estVide() const
	{
		return m_ensemble.empty();
	}
	/*
	 * \brief Surcharche de l'opèrateur ==
	 * \param  const EnsembleCouples& autreEns
	 * \return bool
	 * \fn bool operator==(const EnsembleCouples& autreEns) const
	 */
	template<typename Type1, typename Type2>
	bool EnsembleCouples<Type1, Type2>::operator==(const EnsembleCouples& autreEns) const
	{
		if (m_ensemble.size() == autreEns.m_ensemble.size())
			{
				return std::equal(m_ensemble.begin(), m_ensemble.end(), autreEns.m_ensemble.begin());
			}
		return false;
	}

}
